gusucode.com > LTE基带收发仿真系统matlab源码程序 > LTE baseband simulation/DSH_process.m

    % function DSH_process()
% 请从LTE_main_gui_final.m文件开始运行
% 下行共享信道数据生成 经过信道以及接收端处理
% 
%  Author:		程式小组(徐萌 张妙 张晓庆)
%  Date:		2010-07-11
%  ==========================================================

% 仿真进度条
bar = WaitBar(0,'仿真开始>>>',gcf,550,320);

LTE_schedule_subband % 此处只对用户分配到固定的子带上

minSNR = LTE_par.minSNR;
deltaSNR = LTE_par.deltaSNR;
maxSNR = LTE_par.maxSNR;

nLoop = length(minSNR:deltaSNR:maxSNR); % 仿真SNR个数
totalSimu = LTE_par.nTime*nLoop;        % 总计仿真次数

nTx = LTE_par.BS_par.nAnt; % BS 天线数
nRx = LTE_par.UE_par.nAnt; % UE 天线数
carrBand = LTE_par.carrBand; % 子载波带宽 通常取15KHz
FFT_SIZE = LTE_par.FFT_SIZE; % FFT 变换点数
channelMod = LTE_par.channelMod;  % ITU 信道模型 'PedA' 'PedB' 'VehA' 'VehB'
channelFreq = LTE_par.channelFreq; % 添加信道类型 true:频域信道 false:时域信道



nUE = LTE_par.nUE; % 系统用户数
BLER = zeros(nUE,2,length(minSNR:deltaSNR:maxSNR)); % 用户误块率统计
th = zeros(nUE,2,length(minSNR:deltaSNR:maxSNR)); % 用户吞吐量统计
nSimu = LTE_par.nTime; % 仿真时间长度

iSNR = 1;
for SNRdB = minSNR:deltaSNR:maxSNR
    SNRreal = 10^(0.1*SNRdB);
    disp('iSNR')
    disp(SNRdB)
    for iSimu = 1:nSimu
        str = sprintf('当前进行信噪比 %4.2f dB下第 %d 次仿真>>>',SNRdB,iSimu);
        WaitBar(((iSNR-1)*LTE_par.nTime+iSimu)/totalSimu,bar,str);
        % ===================== 发端过程 ==========================
        % 顺序为每个用户产生发送数据并完成基站端处理过程
        for iUE = 1:nUE
            
            % 基站的基带处理函数,该函数仅用户数据信道,PDSCH处理流程为:
            % 产生信息-->CRC校验-->码块分割-->turbo编码-->速率匹配
            % -->加扰-->层映射-->预编码-->子载波映射-->OFDM调制-->天线映射
            % 根据时域信道或频域信道,输出sendSymb代表时域符号或频域载波映射后符号
            sendSymb = send_process(iUE);
            
            
            % 发端多个用户信号叠加
            if iUE == 1
                sendSymbAll = zeros(size(sendSymb));
            end
            sendSymbAll = sendSymbAll+sendSymb;
        end
        

        [Hcell h] = gen_channel(nTx,nRx,FFT_SIZE,channelFreq,channelMod,carrBand);
        [recSymb,Hcell] = channel(sendSymbAll,Hcell,h,SNRdB);
        
        % ====================== 收端过程 ==========================
        % 顺序检测每个用户信号并完成UE端处理过程
        for iUE = 1:nUE
            
            % UE的基带处理函数,该函数仅用于数据信道,PDSCH在收端处理流程为:
            % 天线逆映射-->OFDM解调-->去子载波映射-->去预编码 MIMO检测-->
            % 去层映射-->解扰-->去速率匹配-->turbo译码-->CRC校验B-->CRC校验A
            % 输出为第iUE个用户可用TB正确、错误接收指示
            err = rec_process(recSymb,Hcell,h,iUE,SNRdB);
            
            for n =1:length(err)
                if err(n)
                    
                    % 误块率统计 此处只记录一个UE的最多两个TB的误块率情况
                    BLER(iUE,n,iSNR) = BLER(iUE,n,iSNR)+err(n);
                    str = sprintf('第 %d个用户本次数据传输 TB%d 出错',iUE,n-1);
                    disp(str);
                    
                else
                    
                    % 吞吐量统计 此处只记录一个UE的最多两个TB的吞吐量情况
                    th(iUE,n,iSNR) = th(iUE,n,iSNR)+LTE_par.UE_par.sizeTB(n,iUE);
                    str = sprintf('第 %d个用户本次数据传输 TB%d 正确',iUE,n-1);
                    disp(str);
                    
                end
            end

        end
        sendSymbAll = []; % 发端数据清零
        
    end
    iSNR = iSNR+1;
end

BLER = BLER/nSimu;

% 频谱效率计算 单位为bit/s/Hz
for iUE = 1:nUE
   th(iUE,:,:) = th(iUE,:,:)./(nSimu/1000)/(LTE_par.UE_par.nRB(iUE)*LTE_par.scPerRB*15000);  
end

WaitBar(1,bar,'仿真结束!!!');
pause(2);
WaitBar(0,bar,'');

BLERUE1 = reshape(BLER(1,1,:),1,iSNR-1);
%  ====================== 画图 ===============================
% % 输出误块率随SNR变化曲线
% figure
% BLERUE1 = reshape(BLER(1,1,:),1,iSNR-1);
% semilogy(minSNR:deltaSNR:maxSNR,BLERUE1),grid on
% % 输出频谱效率随SNR变化曲线
% figure
% thUE1 = reshape(th(1,1,:),1,iSNR-1);
% plot(minSNR:deltaSNR:maxSNR,thUE1),grid on

% % 将信噪比 误块率 频谱效率保存成 mat类型文件
% SNR = minSNR:deltaSNR:maxSNR;
% savedata(LTE_par.UE_par.IMCS(1),SNR,BLER,th,BLERUE1,thUE1);